package service

import (
	"context"
	"devops-super/api"
	v1 "devops-super/api/configs/v1"
	"devops-super/internal/model/entity"
)

// IDeviceConfig 设备配置服务接口
type IDeviceConfig interface {
	// Add 新增设备配置
	Add(ctx context.Context, in *entity.AppDeviceConfig) (err error)

	// Upt 更新设备配置
	Upt(ctx context.Context, in *entity.AppDeviceConfig) (err error)

	// GetPageLst 分页获取设备配置列表
	GetPageLst(ctx context.Context, in *api.PageLstReq) (out *api.PageLstRes[*entity.AppDeviceConfig], err error)

	// Del 删除设备配置
	Del(ctx context.Context, id int) (err error)

	// GetOne 获取单条设备配置
	GetOne(ctx context.Context, id int) (out *entity.AppDeviceConfig, err error)

	// GetConfig 获取设备配置
	GetConfig(ctx context.Context, in *v1.GetDeviceConfigReq) (out *v1.GetDeviceConfigRes, err error)

	// SetConfig 保存设备配置
	SetConfig(ctx context.Context, req *v1.SetDeviceConfigReq) (res *v1.SetDeviceConfigRes, err error)

	// PushCmdToDevice 发送cmd给设备
	PushCmdToDevice(ctx context.Context, deviceNo string, cmd int) (err error)
}

var (
	localDeviceConfig IDeviceConfig
)

// DeviceConfig 获取设备配置服务实例
func DeviceConfig() IDeviceConfig {
	if localDeviceConfig == nil {
		panic("implement not found for interface IDeviceConfig, forgot register?")
	}
	return localDeviceConfig
}

// RegisterDeviceConfig 注册设备配置服务实例
func RegisterDeviceConfig(i IDeviceConfig) {
	localDeviceConfig = i
}
